class MinStack {
public:
    stack<int> s;
    stack<int> mins;
    MinStack() {
    }
    
    void push(int val) {
        if(s.empty())
        {
            s.push(val);
            mins.push(val);
        }//如果一开始都是空的，那么就在最小栈和原栈中都插入一个元素
        else
        {
            s.push(val);//原栈插入元素
            if(val<=mins.top())
            {
                mins.push(val);//最小栈插入，如果这个元素比之前记录的最小值还小，那么就记录这个val，否则就插入之间的最小值
            }
            else
            {
                mins.push(mins.top());
            }
        }
    }
    
    void pop() {
        s.pop();
        mins.pop();     
    }
    
    int top() {
        return s.top();
    }
    
    int getMin() {
        return mins.top();
    }
};